package com.huilian.iotbox.data.utils;

import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.BeanUtils;

import java.util.ArrayList;
import java.util.List;

/**
 * @author 谭晓粤
 * @version 1.0
 * @date 2020/5/26 10:06
 * 实体类跟数据传输类相同属性的复制工具类
 */
public class CopyPropertiesUtils {

    /**
     * 根据转换的类和转换后的类相同属性进行复制相同属性的值，
     *
     * @param <T>
     * @param inputClass 要转换的类
     * @param outInput   转换后的类
     * @return 转换后的类
     */
    public static <T> T CopyProperties(Object inputClass, Class<?> outInput) {
        Object object = null;
        try {
            object = outInput.newInstance();
            BeanUtils.copyProperties(inputClass, object);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return (T) object;
    }

    /**
     * @param input 输入集合
     * @param clazz 输出集合类型
     * @param <E>   输入集合类型
     * @param <T>   输出集合类型
     * @return 返回集合
     */
    public static <E, T> List<T> CopyProperties(List<E> input, Class<T> clazz) {
        List<T> output = null;
        try {
            output = new ArrayList<>();
            if (CollectionUtils.isNotEmpty(input)) {
                for (E source : input) {
                    T target = clazz.newInstance();
                    BeanUtils.copyProperties(source, target);
                    output.add(target);
                }
            }
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
        return output;
    }
}
